﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HerGoS.Administration.Entities;
using System.Data;
using HerGoS.Interfaces;
using HerGoS.DAO;
using HerGoS.Administration.Exceptions;

namespace HerGoS.Administration.Engine
{
    public class GestorPermisos
    {
        /// <summary>
        /// Permite obtener los modulos de un usuario
        /// </summary>
        /// <param name="usuario">Usuario</param>
        /// <returns>Lista de modulos</returns>
        public static List<Modulo> Obtener(Usuario usuario)
        {            
            return ObtenerModulos(usuario, null);
        }

        static List<Modulo> ObtenerModulos(Usuario usuario, Modulo modulo)
        {
            try
            {
                IRepository repo = RepositoryFactory.Create(Config.RepositoryName);
                repo.Nombre = "PERMISOS_SP";
                repo.AddParameter("@ACCION", "BYUSER");
                repo.AddParameter("@IDUSUARIO", usuario.OID);
                repo.AddParameter("@IDMODULO", (modulo == null) ? 0 : modulo.OID);
                DataTable dt = repo.ExecuteDataTable();
                List<Modulo> result = (from row in dt.AsEnumerable()
                                        select PermisoConverter(usuario, row)).ToList();
                return result;
            }
            catch (Exception ex)
            {
                throw new RolGetException(ex);
            }
        }

        #region Converter
        public static Modulo PermisoConverter(Usuario usuario, DataRow row)
        {
            Modulo modulo = GestorModulo.ModuloConverter(row);
            modulo.Modulos = ObtenerModulos(usuario, modulo);
            return modulo;
        }

        #endregion
    }
}
